package com.hyts.bmsp.jfinal.annotations;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * @ClassName: WebMapping
 * @Description: WebMapping功能注解用于操作<br>
 * 				  加载系统中构造对应的Mapping对应的Model类<br>
 * 				 系统可以进行动态注册对应的ORM对应关系操作<br>
 * @author: libo
 * @date: 2017年1月12日 上午9:37:22
 */
/**
 * @Target说明了Annotation所修饰的对象范围：Annotation可被用于 packages、types<br>
 * （类、接口、枚举、Annotation类型）、类型成员（方法、构造方法、成员<br>
 * 作用：用于描述注解的使用范围（即：被描述的注解可以用在什么地方）<br>
 * 1.CONSTRUCTOR:用于描述构造器<br>
 * 2.FIELD:用于描述域<br>
 * 3.LOCAL_VARIABLE:用于描述局部变量<br>
 * 4.METHOD:用于描述方法<br>
 * 5.PACKAGE:用于描述包<br>
 * 6.PARAMETER:用于描述参数<br>
 * 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明<br>
 */
@Target(ElementType.TYPE)//定义对应的注解操作的范围

/**
 * @Retention：
　   @Retention定义了该Annotation被保留的时间长短：<br>
		某些Annotation仅出现在源代码中，而被编译器丢弃；<br>
		而另一些却被编译在class文件中；<br>
		编译在class文件中的Annotation可能会被虚拟机忽略，<br>
		而另一些在class被装载时将被读取（请注意并不影响class的执行，<br>
		因为Annotation与class在使用上是被分离的）。<br>
		使用这个meta-Annotation可以对 Annotation的“生命周期”限制。<br>
　　作用：表示需要在什么级别保存该注释信息，<br>
          用于描述注解的生命周期（即：被描述的注解在什么范围内有效）<br>
　　取值（RetentionPoicy）有：<br>
　　　　1.SOURCE:在源文件中有效（即源文件保留）<br>
　　　　2.CLASS:在class文件中有效（即class保留）<br>
　　　　3.RUNTIME:在运行时有效（即运行时保留）<br>
　　Retention meta-annotation类型有唯一的value作为成员，<br>
	它的取值来自java.lang.annotation.RetentionPolicy的枚举类型值。具体实例如下：<br>
	Column注解的的RetentionPolicy的属性值是RUTIME,这样注解处理器可以通过反射，获取到该注解的属性值，从而去做一些运行时的逻辑处理<br>
 * 
 */
@Retention(RetentionPolicy.RUNTIME)//定义注解操作的生命周期
@Documented//@Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API，因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解，没有成员。
@Inherited//定义对应的注解是否可以实现父类->子类等继承传递
public @interface WebMapping {
	
	/**
	 * @Title: clazzName
	 * @Description: 映射Model class类
	 * @return
	 * @return: Class<?>
	 */
	//public String clazzName();
	
	/**
	 * @Title: tableName
	 * @Description: 表名称
	 * @return
	 * @return: String
	 */
	public String tableName();
	
	/**
	 * @Title: primaryKey
	 * @Description: 主键关键字：默认：Id
	 * @return
	 * @return: String
	 */
	public String primaryKey() default "id"; 
	
}
